class Solution {
public:
    ListNode* swapPairs(ListNode* head) {
    if(head==nullptr||head->next==nullptr)
        return head;
    
    ListNode* newhead=new ListNode();
    newhead->next=head;
    
    ListNode*prev=newhead,*cur=head,*next=head->next,*nnext=head->next->next;
    while(cur&&next)
    {
        prev->next=next;
        next->next=cur;
        cur->next=nnext;
        
        prev=cur;
        cur=nnext;

        if(cur) next=nnext->next;
        if(next)   nnext=next->next;
        
    }
    return newhead->next;
    }
};